<?php
App::uses('AuthComponent', 'Controller/Component');

class User extends AppModel {
    public $primaryKey  = 'id';
    public $avatarUploadDir = 'img/avatars';
    
    public $validate = array(
        'username' => array(
            'nonEmpty' => array(
                'rule' => array('notEmpty'),
                'message' => 'Vui lòng nhập tên đăng nhập',
                'allowEmpty' => false
            ),
            'between' => array( 
                'rule' => array('between', 5, 15), 
                'required' => true, 
                'message' => 'Tên đăng nhập phải có độ dài từ 5 đến 15 ký tự'
            ),
             'unique' => array(
                'rule'    => array('isUniqueUsername'),
                'message' => 'Tên đăng nhập đã được sử dụng'
            ),
            'alphaNumericDashUnderscore' => array(
                'rule'    => array('alphaNumericDashUnderscore'),
                'message' => 'Tên đăng nhập không chứa ký tự đặc biệt'
            ),
        ),
        'password' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'Vui lòng nhập mật khẩu'
            ),
            'min_length' => array(
                'rule' => array('minLength', '6'),  
                'message' => 'Mật khẩu tối thiểu 6 ký tự'
            )
        ),
        
        'password_confirm' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'Vui lòng nhập mật khẩu'
            ),
             'equaltofield' => array(
                'rule' => array('equaltofield','password'),
                'message' => 'Hai mật khẩu không giống nhau.'
            )
        ),
        
        'name' => array(
            'nonEmpty' => array(
                'rule' => array('notEmpty'),
                'message' => 'Nhập tên người dùng',
                'allowEmpty' => false
            ),
            'alphaNumericDashUnderscore' => array(
                'rule'    => array('alphaNumericDashUnderscore'),
                'message' => 'Tên người dùng không chứa ký tự đặc biệt'
            ),
        ),
        
        'email' => array(
            'required' => array(
                'rule' => 'email',
                'message' => 'Email sai định dạng.'    
            ),
             'unique' => array(
                'rule'    => array('isUniqueEmail'),
                'message' => 'Email này đã có người sử dụng',
            ),
            'between' => array( 
                'rule' => array('between', 6, 60), 
                'message' => 'Email phải có độ dài từ 6 đến 60 ký tự'
            )
        ),
        
        
        'password_update' => array(
            'min_length' => array(
                'rule' => array('minLength', '6'),   
                'message' => 'Password must have a mimimum of 6 characters',
                'allowEmpty' => true,
                'required' => false
            )
        ),
        'password_confirm_update' => array(
             'equaltofield' => array(
                'rule' => array('equaltofield','password_update'),
                'message' => 'Both passwords must match.',
                'required' => false,
            )
        )

        
    );
    
        /**
     * Before isUniqueUsername
     * @param array $options
     * @return boolean
     */
    function isUniqueUsername($check) {

        $username = $this->find(
            'first',
            array(
                'fields' => array(
                    'User.id',
                    'User.username'
                ),
                'conditions' => array(
                    'User.username' => $check['username']
                )
            )
        );

        if(!empty($username)){
            if(@$this->data[$this->alias]['user_id'] == @$username['User']['id']){
                return true; 
            }else{
                return false; 
            }
        }else{
            return true; 
        }
    }

    /**
     * Before isUniqueEmail
     * @param array $options
     * @return boolean
     */
    function isUniqueEmail($check) {

        $email = $this->find(
            'first',
            array(
                'fields' => array(
                    'User.id'
                ),
                'conditions' => array(
                    'User.email' => $check['email']
                )
            )
        );
        if(!empty($email)){
            if(@$this->data[$this->alias]['user_id'] == @$email['User']['id']){
                return true; 
            }else{
                return false; 
            }
        }else{
            return true; 
        }
    }
    
    public function alphaNumericDashUnderscore($check) {
        // $data array is passed using the form field name as the key
        // have to extract the value to make the function generic
        $value = array_values($check);
        $value = $value[0];

        return preg_match('/^[a-zA-Z0-9_ \-]*$/', $value);
    }
    
    public function equaltofield($check,$otherfield) 
    { 
        //get name of field 
        $fname = ''; 
        foreach ($check as $key => $value){ 
            $fname = $key; 
            break; 
        } 
        return $this->data[$this->name][$otherfield] === $this->data[$this->name][$fname]; 
    } 

    /**
     * Before Save
     * @param array $options
     * @return boolean
     */
     public function beforeSave($options = array()) {
        // hash our password
        if (isset($this->data[$this->alias]['password'])) {
            $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);

            echo $this->data[$this->alias]['password'];
        }
        
        // if we get a new password, hash it
        if (isset($this->data[$this->alias]['password_update'])) {
            $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password_update']);
        }
    
        // fallback to our parent
        return parent::beforeSave($options);
    }
    
    function get_user()
    {
        /*
        $sql = array(
            "conditions"=> array(
									"level !="=> "1"
								),
			"order" => array('created' => 'desc'),
			);
        $data = $this->find("all",$sql);
        */
        $sql = "SELECT * FROM users WHERE `level` != 1 OR `level` IS NULL";
        $data = $this->query($sql);
		return $data;
    }
    
    function change_status($user_id = "")
    {
        $data = $this->findById($user_id);
        if(!empty($data))
        {
            $status = $data['User']['status'];
            $change_status = $status == 1 ? '0' : '1';
            $sql = "UPDATE users SET status = '$change_status' WHERE id = '$user_id'";
            $this->query($sql);
            return $change_status;
        }
        return -1;
    }
    
    function del($user_id = "")
    {
    	return $this->delete($user_id);
    }
    
    function get_last_user()
    {
        $sql = array(
			"order" => array('created' => 'desc'),
			"limit" => "10"
			);
        return $this->find("all",$sql);
    }
    

}

?>